package server;

import gestion_bd.IniciarTablaClientes;

import java.io.Console;
import java.util.Arrays;

/**
 * Clase que contiene el "main" del componente del servidor. El es el que recibir� los par�mteros de entrada 
 * al ejecutar el server y en base a estos iniciar� los modulos correspondientes
 * @author Matias
 *
 */
public class ServerMain {
	private static final int PUERTO_CLIENTE = 8888;
	private static final int PUERTO_ADMIN = 5050;
	private static final int PUERTO_CONSULTAS = 7070;
	/**
	 * La ide es usar este para mostrar ayuda, parametros opcionales, inicializacion de la tabla de clientes, etc.
	 * @param args
	 */
	public static void main(String[] args) {
		
		@SuppressWarnings("unused")
		boolean entradaCorrecta=false;
		//manejo de parametros ingresados por consola!!
		if (args.length > 0){
			 
			//System.out.println("Parámetro"+i+":"+args[i]);
			if(args.length==1 && args[0].toUpperCase().equals("-H")){
				System.out.println(" -h: ayuda.\n -run quorum: correr el server. \n -init-tablas: cargar clientes.\n -cambiar-pass : cambiar la contraseña del usuario");
			
			}else if(args.length==1 && args[0].toUpperCase().equals("-CAMBIAR-PASS")){
				// cambiar contraseña del keystore
				Console console = System.console();
				console.printf("Ingrese su password:");
				char[] passActual = console.readPassword();
				
				if(ServiciosSSL.verificarPassKS(passActual)){
					console.printf("Ingrese password nuevo:");
					char[] passNuevo1 = console.readPassword();
					console.printf("Vuelva a ingresar password nuevo:");
					char[] passNuevo2 = console.readPassword();
					if(Arrays.equals(passNuevo1, passNuevo2)){
						ServiciosSSL.cambiarPassKS(passActual, passNuevo1);
					}else{
						console.printf("Los passwords nuevos no coinciden");
					}
					
				}else{
					System.err.println("La contraseña ingresada no es valida.");
				}
				//ServiciosSSL.cambiarPassKS(path, passViejo, passNuevo);
				
			}else if(args.length==1 && args[0].toUpperCase().equals("-INIT-TABLAS")){
				
				Console console = System.console();
				console.printf("Ingrese su password:");
				char[] passwordChars = console.readPassword();
				
				//char[] passwordChars = "12345678".toCharArray();
				new IniciarTablaClientes(passwordChars);
			
			}else if(2==args.length&& args[0].toUpperCase().equals("-RUN")){
						
				if(isInteger(args[1])){
					//leer pass-----
					/*
					Console console = System.console();
					console.printf("Ingrese su password: ");
					char[] passwordChars = console.readPassword();
					*/
					char[] passwordChars = "12345678".toCharArray();//"server".toCharArray();// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
					//String passwordString = new String(passwordChars);
					//console.printf(passwordString + "\n");
					new ServidorPrincipal(PUERTO_CONSULTAS, PUERTO_ADMIN, PUERTO_CLIENTE, Integer.parseInt(args[1]), passwordChars);
							
				}else System.out.println("Error al ingresar los parametros. Para más información consultar ayuda -h.");
						
						
			}else System.out.println("Error al ingresar los parametros. Para más información consultar ayuda -h.");
						
			
	}else	{ 
		System.out.println("No se ingreso ningun parametro. Para mas información utilice la opcion de ayuda -h.");
		
	}

}
	
	public static boolean isInteger(String s) {
	    try { 
	        Integer.parseInt(s); 
	    } catch(NumberFormatException e) { 
	        return false; 
	    }
	    // se llega acá solo si es entero
	    return true;
	}
}